今天要來介紹的是請求偽造 (Request Forgeries)的課程,在這個課程中會介紹何謂跨站請求偽造 (Cross-Site Request Forgeries),那我們就馬上開始吧!
所謂的跨站請求偽造,也被稱為 one-click attack 或者 session riding,通常縮寫為 CSRF(常被念做sea-surf) 或者 XSRF, 這種攻擊會挾制使用者目前正在瀏覽的網頁,並執行並非使用者預期會執行的動作。
可能有人會把這種攻擊方式跟跨網站指令碼 (XSS)做比較,簡單來說,XSS攻擊利用的是使用者對網站的信任,也就是使用者會相信並執行網站顯示的任何內容;CSRF 利用的則是網站對使用者網頁瀏覽器的信任,瀏覽器會相信請求是來自合法的使用者並開啟網頁。
CSRF通常具有下列特徵:
舉個例子,假設一個網頁他會利用HTTP Header的cookie欄位來判斷使用者是不是在登入的狀態,才會允許執行某些功能,但因為他只驗證cookie,所以有可能這個HTTP請求並不是使用者本人發出的,但卻還是通過驗證,並執行了並非使用者自願執行的功能,這樣就是有CSRF風險存在。
如果今天小明登入了一個網路銀行,這個網路銀行的轉帳功能是利用這個網址達成的:http://bank.com/transfer?account_number_from=123456789&account_number_to=987654321&amount=100000 。
在小明仍然還處於登入狀態的時候,如果他同時開啟另一個分頁,並讀取一個被植入一串惡意程式碼(如下)的網頁,這段惡意程式碼表面上是一個超連結,且顯示的文字是邀請小明點選去看他的圖片,但若是小明溱的點選了,他實際上卻是發出一個把小明帳戶金額轉帳到其他帳戶的HTTP請求。
<a href="http://bank.com/transfer?account_number_from=123456789&account_number_to=987654321&amount=100000">正妹照無限量供應!</a>
更進階的做法是,攻擊者可以把惡意程式碼藏在img標籤裡(如下),這樣小明連超連結都不用點,只要一打開這個網頁就直接執行惡意代碼了。
<img href="http://bank.com/transfer?account_number_from=123456789&account_number_to=987654321&amount=100000">
參考連結:
[1] https://zh.wikipedia.org/zh-tw/%E8%B7%A8%E7%AB%99%E8%AB%8B%E6%B1%82%E5%81%BD%E9%80%A0